package com.edu.exam.enums.grading;

import com.edu.exam.enums.core.BaseEnum;

import java.util.Arrays;

/**
 * 成绩分数类型枚举
 *
 * 定义不同类型的成绩分数
 *
 * @author System
 * @version 1.0.0
 */
public enum GradeScoreType implements BaseEnum {

    /** 原始分数 */
    RAW("RAW", "原始分数"),

    /** 百分制分数 */
    PERCENTAGE("PERCENTAGE", "百分制分数"),

    /** 等级分数 */
    GRADE("GRADE", "等级分数"),

    /** 点数分数 */
    POINTS("POINTS", "点数分数"),

    /** 标准化分数 */
    STANDARDIZED("STANDARDIZED", "标准化分数"),

    /** 加权分数 */
    WEIGHTED("WEIGHTED", "加权分数"),

    /** 平均分 */
    AVERAGE("AVERAGE", "平均分"),

    /** 总分 */
    TOTAL("TOTAL", "总分"),

    /** 最高分 */
    MAXIMUM("MAXIMUM", "最高分"),

    /** 最低分 */
    MINIMUM("MINIMUM", "最低分"),

    /** 中位数 */
    MEDIAN("MEDIAN", "中位数"),

    /** 众数 */
    MODE("MODE", "众数"),

    /** 标准分 */
    STANDARD("STANDARD", "标准分"),

    /** Z分数 */
    Z_SCORE("Z_SCORE", "Z分数"),

    /** T分数 */
    T_SCORE("T_SCORE", "T分数"),

    /** 百分位 */
    PERCENTILE("PERCENTILE", "百分位"),

    /** 四分位 */
    QUARTILE("QUARTILE", "四分位");

    private final String code;
    private final String description;

    GradeScoreType(String code, String description) {
        this.code = code;
        this.description = description;
    }

    @Override
    public String getCode() {
        return code;
    }

    @Override
    public String getDescription() {
        return description;
    }

    public static GradeScoreType fromCode(String code) {
        return Arrays.stream(values())
                .filter(e -> e.getCode().equals(code))
                .findFirst()
                .orElseThrow(() -> new IllegalArgumentException("Unknown grade score type code: " + code));
    }
    @Override
    public String toString() {
        return description;
    }
}